home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 April
/
EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso
/
EARCD
/
biz
/
dbase
/
carcosts.lha
/
CarCosts
/
Source
/
Rexx.c
< prev
Wrap
C/C++ Source or Header
|
1996-11-02
|
13KB
|
601 lines
#include "demo.h"
#include "Daten.h"
LONG __saveds __asm getfuelnumber(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *a);
struct Hook getfuelnumberhook =
{
{
NULL,NULL
}
,(VOID *)getfuelnumber,NULL,NULL
};
LONG __saveds __asm getfuelnumber(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *a)
{
LONG max;
char buffer[30];
get(LI_Treib, MUIA_List_Entries, &max);
sprintf(buffer, "%ld", max);
set(obj, MUIA_Application_RexxString, buffer);
return(0);
}
LONG __saveds __asm getfuelinfo(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]));
struct Hook getfuelinfohook =
{
{
NULL,NULL
}
,(VOID *)getfuelinfo,NULL,NULL
};
LONG __saveds __asm getfuelinfo(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]))
{
LONG max, c;
struct NodeTreib *nt;
char buffer[30];
char *b;
c = *(LONG *)a[1];
b = (char *)a[0];
get(LI_Treib, MUIA_List_Entries, &max);
if(c < max && c >= 0)
{
DoMethod(LI_Treib, MUIM_List_GetEntry, c, &nt);
if(!strcmp(b,"DATE"))
{
ConvertToString(nt->Days, buffer);
}
else
{
if(!strcmp(b,"KM"))
{
sprintf(buffer, FORMAT_KILOMETER, nt->kmStand);
}
else
{
if(!strcmp(b,"LITER"))
{
sprintf(buffer, FORMAT_LITER, nt->Liter);
}
else
{
if(!strcmp(b,"PRICE"))
{
sprintf(buffer, FORMAT_PREIS, nt->Preis);
}
else
{
if(!strcmp(b,"DKM"))
{
sprintf(buffer, FORMAT_DKILOMETER, nt->deltakm);
}
else
{
if(!strcmp(b,"LPERKM"))
{
sprintf(buffer, FORMAT_VERBRAUCH, nt->Verbrauch);
}
else
{
return(10);
}
}
}
}
}
}
set(obj, MUIA_Application_RexxString, buffer);
return(0);
}
else
{
return(10);
}
}
LONG __saveds __asm getsuppnumber(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *a);
struct Hook getsuppnumberhook =
{
{
NULL,NULL
}
,(VOID *)getsuppnumber,NULL,NULL
};
LONG __saveds __asm getsuppnumber(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *a)
{
LONG max;
char buffer[30];
get(LI_Unter, MUIA_List_Entries, &max);
sprintf(buffer, "%ld", max);
set(obj, MUIA_Application_RexxString, buffer);
return(0);
}
LONG __saveds __asm getsuppinfo(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]));
struct Hook getsuppinfohook =
{
{
NULL,NULL
}
,(VOID *)getsuppinfo,NULL,NULL
};
LONG __saveds __asm getsuppinfo(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]))
{
LONG max, c;
struct NodeUnter *nu;
char buffer[3*MAXTEXTSTRING+1];
char *b;
c = *(LONG *)a[1];
b = (char *)a[0];
get(LI_Unter, MUIA_List_Entries, &max);
if(c < max && c >= 0)
{
DoMethod(LI_Unter, MUIM_List_GetEntry, c, &nu);
if(!strcmp(b,"DATE"))
{
ConvertToString(nu->Days, buffer);
}
else
{
if(!strcmp(b,"TITLE"))
{
strcpy(buffer, nu->Titelstring);
}
else
{
if(!strcmp(b,"REMARK"))
{
strcpy(buffer, nu->Bemerkungstring);
}
else
{
if(!strcmp(b,"PRICE"))
{
sprintf(buffer, FORMAT_DM, nu->Preis);
}
else
{
return(10);
}
}
}
}
set(obj, MUIA_Application_RexxString, buffer);
return(0);
}
else
{
return(10);
}
}
LONG __saveds __asm getsummary(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]));
struct Hook getsummaryhook =
{
{
NULL,NULL
}
,(VOID *)getsummary,NULL,NULL
};
LONG __saveds __asm getsummary(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]))
{
char buffer[MAXTEXTSTRING];
char *b;
b = (char *)a[0];
if(!strcmp(b,"STARTDATE"))
{
strcpy(buffer, Daten.SDatum);
}
else
{
if(!strcmp(b,"ENDDATE"))
{
strcpy(buffer, Daten.EDatum);
}
else
{
if(!strcmp(b,"LITER"))
{
sprintf(buffer, FORMAT_LITER, Daten.Liter);
}
else
{
if(!strcmp(b,"KM"))
{
sprintf(buffer, FORMAT_KILOMETER, Daten.Kilometer);
}
else
{
if(!strcmp(b,"CONSUMPTION"))
{
sprintf(buffer, FORMAT_VERBRAUCH, Daten.Verbrauch);
}
else
{
if(!strcmp(b,"PRICEFUEL"))
{
sprintf(buffer, FORMAT_DM, Daten.TreibGes);
}
else
{
if(!strcmp(b,"PRICESUPPORT"))
{
sprintf(buffer, FORMAT_DM, Daten.UnterGes);
}
else
{
if(!strcmp(b, "SIGN"))
{
strcpy(buffer, Start_Kennzeichen);
}
else
{
if(!strcmp(b, "KMSTART"))
{
sprintf(buffer, FORMAT_KILOMETER, Start_KM);
}
else
{
return(10);
}
}
}
}
}
}
}
}
}
set(obj, MUIA_Application_RexxString, buffer);
return(0);
}
LONG __saveds __asm setfuelentry(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]));
struct Hook setfuelentryhook =
{
{
NULL,NULL
}
,(VOID *)setfuelentry,NULL,NULL
};
LONG __saveds __asm setfuelentry(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]))
{
char buffer[MAXTEXTSTRING];
char *date, *km, *liter, *price;
LONG days, ret=0;
struct NodeTreib nt, *n=&nt;
BOOL update;
date = (char *)a[0];
km = (char *)a[1];
liter = (char *)a[2];
price = (char *)a[3];
update= (BOOL) a[4];
strcpy(buffer, date);
/* Datum testen */
days = ConvertToDays(buffer);
if(days == -1) return(10); /* Datum nicht korrekt !!! */
strcpy(nt.Datum, buffer);
nt.Days = days;
sscanf(km , "%ld", &nt.kmStand);
sscanf(liter, "%lf", &nt.Liter);
sscanf(price, "%lf", &nt.Preis);
FillTreib(&nt);
DoMethod(LI_Treib, MUIM_List_Insert,
&n, 1, MUIV_List_Insert_Sorted);
/* Es wäre schön, das Datum, das zu einer negativen Distanz gehört, */
/* zurückgeben zu können. Dies scheint aber nicht möglich. Wenn ret */
/* ungleich 0 ist, wird kein String zurückgegeben. */
if(update)
{
if(days = ReCalcTreib())
{
/* Negative Distanz */
ret = 5;
}
}
changes = TRUE;
return(ret);
}
LONG __saveds __asm setsupportentry(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]));
struct Hook setsupportentryhook =
{
{
NULL,NULL
}
,(VOID *)setsupportentry,NULL,NULL
};
LONG __saveds __asm setsupportentry(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]))
{
char buffer[MAXTEXTSTRING+1];
char *date, *title, *remark, *price;
LONG days;
struct NodeUnter nu, *n=ν
BOOL update;
date = (char *)a[0];
title = (char *)a[1];
remark = (char *)a[2];
price = (char *)a[3];
update = (BOOL) a[4];
strcpy(buffer, date);
/* Datum testen */
days = ConvertToDays(buffer);
if(days == -1) return(10); /* Datum nicht korrekt !!! */
strcpy(nu.Datum, buffer);
nu.Days = days;
sscanf(price,"%lf",&nu.Preis);
sprintf(nu.Titelstring, FORMAT_TITEL, title);
sprintf(nu.Bemerkungstring, FORMAT_BEMERKUNG, remark);
strcpy(buffer, nu.Titelstring);
buffer[MAX_TITEL] = 0;
strcpy(nu.DispTitel, buffer);
strcpy(buffer, nu.Bemerkungstring);
buffer[MAX_REM] = 0;
strcpy(nu.DispRem, buffer);
FillUnter(&nu);
DoMethod(LI_Unter, MUIM_List_Insert,
&n, 1, MUIV_List_Insert_Sorted);
if(update)
{
ReCalcTreib(); /* Damit die aktuellen Werte angezeigt werden */
}
changes = TRUE;
return(0);
}
LONG __saveds __asm setstart(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]));
struct Hook setstarthook =
{
{
NULL,NULL
}
,(VOID *)setstart,NULL,NULL
};
LONG __saveds __asm setstart(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]))
{
char buffer[50];
char * date, * car;
long * startkm, * datef, days;
BOOL ok;
ok = TRUE;
if(changes)
{
if(!MUI_Request(App, WI_Cost, 0, NULL,
TEXT(MSG_CLEAR_CONT_REQ),
TEXT(MSG_NOTSAVED_NEW_REQ),
TAG_END))
{
ok = FALSE;
;
}
}
if(ok)
{
date = (char *)a[0];
car = (char *)a[1];
startkm= (long *)a[2];
datef = (long *)a[3];
strcpy(buffer, date);
/* Datum testen */
days = ConvertToDays(buffer);
if(days == -1) return(10); /* Datum nicht korrekt !!! */
strcpy(Start_Datum, buffer);
Start_Day = days;
Start_Format = *datef;
if(Start_Format < 0 || Start_Format > 4) Start_Format = 0;
Start_KM = *startkm;
strcpy(Start_Kennzeichen, car);
RemoveAll();
changes = FALSE;
FileName[0] = 0;
ReCalcTreib();
}
if(ok) return(0);
else return(5);
}
LONG __saveds __asm datetoint(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]));
struct Hook datetointhook =
{
{
NULL,NULL
}
,(VOID *)datetoint,NULL,NULL
};
LONG __saveds __asm datetoint(register __a0 struct Hook *hook,
register __a2 struct Object *obj,
register __a1 LONG *(a[]))
{
char buffer[50];
char * date;
long days;
BOOL ok;
ok = TRUE;
if(ok)
{
date = (char *)a[0];
strcpy(buffer, date);
/* Datum testen */
days = ConvertToDays(buffer);
if(days == -1) return(10); /* Datum nicht korrekt !!! */
sprintf(buffer, "%ld", days);
set(obj, MUIA_Application_RexxString, buffer);
}
if(ok) return(0);
else return(5);
}
struct MUI_Command commands[] =
{
{
"getfuelnumber", NULL, 0, &getfuelnumberhook
}
,
{
"getfuelinfo", "ITEM/A,NUMBER/N/A" , 2 , &getfuelinfohook
}
,
{
"getsuppnumber", NULL, 0, &getsuppnumberhook
}
,
{
"getsuppinfo", "ITEM/A,NUMBER/N/A" , 2 , &getsuppinfohook
}
,
{
"getsummary", "ITEM/A" , 1 , &getsummaryhook
}
,
{
"setfuelentry", "DATE/A,KM/A,LITER/A,PRICE/A,UPDATE/S" , 5 , &setfuelentryhook
}
,
{
"setsupportentry", "DATE/A,TITLE/A,REMARK/A,PRICE/A,UPDATE/S" , 5 , &setsupportentryhook
}
,
{
"setstart", "DATE/A,CAR/A,STARTKM/N/A,DATEFORMAT/N/A" , 4
, &setstarthook
}
,
{
"datetoint", "DATE/A" , 1
, &datetointhook
}
,
{
NULL , NULL , NULL , NULL
}
};